package br.com.sgi.util;

import java.io.Serializable;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateUtil implements Serializable {

	private static final long serialVersionUID = 4721671662697188161L;

	private static final String pt_BR = "dd/MM/yyyy";
	private static final String pt_BR2 = "dd-MM-yyyy";

	/**
	 * Retorna uma String contendo a data atual por extenso.
	 * */
	public static String getDataAtualPorExtenso() {
		DateFormat df = new SimpleDateFormat("EEEE, d MMMM yyyy");
		return df.format(new Date(System.currentTimeMillis()));
	}

	/**
	 * Retorna uma String contendo a data atual por extenso.
	 * */
	public static String getDataAtualPorExtenso(Date date) {
		DateFormat dfmt = new SimpleDateFormat("EEEE, d 'de' MMMM ");
		String dt = getDateStr(date);
		
		return dfmt.format(getDate(dt));
	}

	/**
	 * Retorna um Date da String fornecida "dd/MM/yyyy".
	 */
	public static Date getDate(String strDate) {
		Date date = null;
		DateFormat df = new SimpleDateFormat(pt_BR);
		try {
			if ((strDate != null) && !(strDate.equals(""))) {
				date = df.parse(strDate);
			}
		} catch (ParseException e) {
			System.out.println(e.getMessage());
		}
		return date;
	}

	/**
	 * Retorna a data atual no formato Date.
	 */
	public static Date getDateNow() {
		return new Date(System.currentTimeMillis());
	}

	/**
	 * Retorna a data atual no formato String.
	 */
	public static String getDateNowStr() {
		DateFormat df = new SimpleDateFormat(pt_BR);
		return df.format(getDateNow());
	}

	/**
	 * Retorna uma String de data no formato "dd/MM/yyyy".
	 */
	public static String getDateStr(Date date) {
		DateFormat df = new SimpleDateFormat(pt_BR);
		return df.format(date);
	}

	/**
	 * Retorna uma String de data no formato "dd/MM/yyyy".
	 */
	public static String getDateStr2(Date date) {
		DateFormat df = new SimpleDateFormat(pt_BR2);
		return df.format(date);
	}

	/**
	 * Retorna um Date como uma sql.Date String fornecida "dd/MM/yyyy".
	 */
	public static java.sql.Date getSqlDate(String strDate) {
		Date date = getDate(strDate);
		java.sql.Date dataSql;
		dataSql = new java.sql.Date(date.getTime());
		return dataSql;
	}

	/**
	 * 
	 * Verifica se o periodo informado a maior do que 1 ano
	 * 
	 * @param start
	 * @param end
	 * @return
	 */
	public static boolean isAfterOneYear(Date start, Date end) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(start);
		cal.add(Calendar.YEAR, 1);
		if (end.after(cal.getTime())) {
			return true;
		}
		return false;
	}

	public static boolean isDataInformadaMenorDataAtual(Date dataInformada) {
		String strDate = getDateStr(DateUtil.getDateNow());
		if (dataInformada.before(getDate(strDate))) {
			return true;
		}

		return false;
	}

	

	/**
	 * Remove a qtd de dias na data informada.
	 */
	public static Date removeDay(Date date, int qtdDay) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.DAY_OF_MONTH, -qtdDay);
		return cal.getTime();
	}

	/**
	 * Remove a qtd de meses na data informada.
	 */
	public static Date removeMonth(Date date, int qtdMonth) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.MONTH, -qtdMonth);
		return cal.getTime();
	}

	/**
	 * Remove a qtd de anos na data informada.
	 */
	public static Date removeYear(Date date, int qtdYear) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.YEAR, -qtdYear);
		return cal.getTime();
	}

}
